package com.cq.utils;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class PushAddress {

      public static void main(String[] args) {
//            System.out.println(getSafeUrl("\t\n" +
//                    "d3a91452bb0571b8b05893f835c1c108", "11212122", 1469762325L));
            System.out.println(getNextThreeDay(new Date()));
            System.out.println(getSafeUrl("123",getNextThreeDay(new Date())));
      }

      public static Long getNextThreeDay(Date date){
            Calendar calendar = Calendar.getInstance();
//            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            calendar.add(Calendar.DATE, 3);
            return calendar.getTimeInMillis()/1000;
      }

      private static final char[] DIGITS_LOWER =
            {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

      /*
      * KEY+ streamName + txTime
      */
      public static String getSafeUrl(String streamName, long txTime) {
            String key = "d3a91452bb0571b8b05893f835c1c108";
            String input = new StringBuilder().
                              append(key).
                              append(streamName).
                              append(Long.toHexString(txTime).toUpperCase()).toString();

            String txSecret = null;
            try {
                  MessageDigest messageDigest = MessageDigest.getInstance("MD5");
                  txSecret  = byteArrayToHexString(
                              messageDigest.digest(input.getBytes("UTF-8")));
            } catch (NoSuchAlgorithmException e) {
                  e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                  e.printStackTrace();
            }

            return txSecret == null ? "" :
                              new StringBuilder().
                              append("txSecret=").
                              append(txSecret).
                              append("&").
                              append("txTime=").
                              append(Long.toHexString(txTime).toUpperCase()).
                              toString();
      }

      private static String byteArrayToHexString(byte[] data) {
            char[] out = new char[data.length << 1];

            for (int i = 0, j = 0; i < data.length; i++) {
                  out[j++] = DIGITS_LOWER[(0xF0 & data[i]) >>> 4];
                  out[j++] = DIGITS_LOWER[0x0F & data[i]];
            }
            return new String(out);
      }
}